package com.service;

import com.domain.entity.Goods;
import com.domain.req.AddGoodsReq;
import com.domain.req.PageListReq;
import com.domain.req.PageReq;
import com.domain.req.UpdateGoodsReq;
import com.domain.vo.GoodsGetByIdVO;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @author caishenao
 * @description 针对表【goods】的数据库操作Service
 * @createDate 2023-10-12 20:12:36
 */
public interface GoodsService {
    /**
     * 根据id获取商品
     *
     * @param id 商品id
     * @return 商品信息
     */
    GoodsGetByIdVO getById(Integer id);

    /**
     * 新增商品信息
     *
     * @param addGoodsReq 新增商品请求
     */
    void addGoods(AddGoodsReq addGoodsReq);

    /**
     * 分页查询
     *
     * @param pageReq     分页请求
     * @param pageListReq 分页查询的内容
     * @return 商品的分页数据
     */
    PageInfo<Goods> pageList(PageReq pageReq, PageListReq pageListReq);

    /**
     * 根据商品id删除商品信息
     *
     * @param id 商品id
     */
    void deleteById(Integer id);

    /**
     * 根据商品id修改商品信息
     *
     * @param updateGoodsReq 修改商品信息请求
     */
    void updateById(UpdateGoodsReq updateGoodsReq);

    /**
     * 根据商品id重新计算
     *
     * @param goodsId 商品id
     */
    void recalculateByGoodsId(Integer goodsId);

    /**
     * 根据配件id重新计算商品的信息
     *
     * @param accessoryId   配件id
     * @param oldPrice      原来的价格
     * @param oldInputPrice 原来的进价
     */
    void recalculateByAccessoryId(Integer accessoryId, Double oldPrice, Double oldInputPrice);

    /**
     * 查询商品信息
     *
     * @param searchValue 输入的值
     * @return 符合查询条件的商品信息集合
     */
    List<Goods> selectGoods(String searchValue);

    /**
     * 根据商品id修改商品信息
     *
     * @param goods 商品信息
     */
    void update(Goods goods);
}
